import pandas as pd
import numpy as np

data_dict = {
    '姓名': ['张三', '李四', '王五', '赵六', '钱七'],
    '年龄': [25, 30, 35, 28, 32],
    '城市': ['北京', '上海', '广州', '深圳', '杭州'],
    '薪资': [8000, 12000, 15000, 11000, 13000],
    '部门': ['技术', '销售', '技术', '市场', '销售']
}

df = pd.DataFrame(data_dict)

# 单列选择（返回Series）
ages = df['年龄']
print("年龄列（Series）:")
print(type(ages))
print(ages)

# 单列选择（返回DataFrame）
age_df = df[['年龄']]
print("\n年龄列（DataFrame）:")
print(type(age_df))
print(age_df)

# 多列选择
selected_cols = df[['姓名', '年龄', '薪资']]
print("\n选择多列:")
print(selected_cols)


# 使用iloc按位置选择
print("第一行（iloc[0]）:")
print(df.iloc[0])

print("\n前三行（iloc[0:3]）:")
print(df.iloc[0:3])

print("\n指定行（iloc[[0, 2, 4]]）:")
print(df.iloc[[0, 2, 4]])

# 使用loc按标签选择
print("\n使用loc按标签选择第一行:")
print(df.loc[0])

print("\n使用loc选择多行:")
print(df.loc[0:2])

# === 行列同时选择 ===
print("\n=== 行列同时选择 ===")

# iloc: 行位置，列位置
print("iloc选择前3行，前2列:")
print(df.iloc[0:3, 0:2])

print("\niloc选择指定行列:")
print(df.iloc[[0, 2], [1, 3]])

# loc: 行标签，列标签
print("\nloc选择指定行列:")
print(df.loc[0:2, ['姓名', '薪资']])

print("\nloc选择所有行，指定列:")
print(df.loc[:, ['姓名', '年龄']])

# === 条件选择 ===
print("\n=== 条件选择 ===")

# 简单条件
high_salary = df[df['薪资'] > 10000]
print("薪资大于10000的员工:")
print(high_salary)

# 多条件（AND）
young_high_salary = df[(df['年龄'] < 30) & (df['薪资'] > 10000)]
print("\n年龄小于30且薪资大于10000的员工:")
print(young_high_salary)

# 多条件（OR）
condition_or = df[(df['年龄'] < 26) | (df['薪资'] > 14000)]
print("\n年龄小于26或薪资大于14000的员工:")
print(condition_or)

# 使用isin方法
tech_sales = df[df['部门'].isin(['技术', '销售'])]
print("\n技术或销售部门的员工:")
print(tech_sales)

# 字符串条件
contains_京 = df[df['城市'].str.contains('京')]
print("\n城市包含'京'的员工:")
print(contains_京)

# 使用query方法（更直观的条件表达式）
print("\n使用query方法:")
query_result = df.query("年龄 > 28 and 薪资 < 13000")
print(query_result)

# 复杂query条件
query_complex = df.query("部门 == '技术' and 城市 in ['北京', '广州']")
print("\n复杂query条件:")
print(query_complex)